package com.lhl.security.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.lhl.security.domain.Menu;
import com.lhl.security.service.MenuService;
import com.github.pagehelper.Page;
import com.lhl.security.utils.PageUtils;
import com.lhl.security.utils.R;
import com.github.pagehelper.page.PageMethod;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Husky
 */
@RestController
@RequestMapping("menu")
public class MenuController {

    private final MenuService menuService;

    public MenuController(MenuService menuService) {
        this.menuService = menuService;
    }

    /**
     * 通过id获取对象
     *
     * @param id 对象id
     * @return R
     */
    @GetMapping("getById")
    public R getById(Long id) {
        if (null == id) {
            return R.no();
        }
        Menu byId = menuService.getById(id);
        return null != byId ? R.ok().data(byId) : R.no();
    }

    /**
     * 分页查询对象
     *
     * @param pageNum  页码
     * @param pageSize 条数
     * @return R
     */
    @GetMapping("page")
    public R page(Integer pageNum, Integer pageSize) {
        if (null == pageNum || null == pageSize || pageNum <= 0 || pageSize <= 0) {
            pageNum = 1;
            pageSize = 5;
        }
        Page<Menu> page = PageMethod.startPage(pageNum, pageSize);
        menuService.list(
                Wrappers.<Menu>lambdaQuery()
                        .orderByDesc(Menu::getId)
        );
        PageUtils<Menu> pageUtils = new PageUtils<>(page);
        return !pageUtils.getList().isEmpty() ? R.ok().data(pageUtils) : R.no();
    }

    /**
     * 通过id集合删除对象
     *
     * @param ids id集合
     * @return R
     */
    @PostMapping("removeByIds")
    public R removeByIds(@RequestBody List<Long> ids) {
        return null != ids && !ids.isEmpty() && menuService.removeByIds(ids) ? R.ok() : R.no();
    }

    /**
     * 通过id删除对象
     *
     * @param id 对象id
     * @return R
     */
    @GetMapping("removeById")
    public R removeById(Long id) {
        return null != id && menuService.removeById(id) ? R.ok() : R.no();
    }

    /**
     * 添加对象
     *
     * @param o 对象信息
     * @return R
     */
    @PostMapping("save")
    public R save(@RequestBody Menu o) {
        return null != o && menuService.save(o) ? R.ok().data(o) : R.no();
    }

    /**
     * 通过id修改对象
     *
     * @param o 对象信息
     * @return R
     */
    @PostMapping("updateById")
    public R updateById(@RequestBody Menu o) {
        return null != o && menuService.updateById(o) ? R.ok() : R.no();
    }

    /**
     * 查询所有对象
     *
     * @return R
     */
    @GetMapping("list")
    public R list() {
        List<Menu> list = menuService.list(
                Wrappers.<Menu>lambdaQuery()
                        .orderByDesc(Menu::getId)
        );
        return !list.isEmpty() ? R.ok().data(list) : R.no();
    }

}